草庐IT

C++ unique_ptr 和映射

全部标签

c++ - 如何对 std::shared_ptr<Widget> 对象的容器进行排序?

classWidget;std::vector>containerclassCriterium{public:booloperator()(constWidget&left,constWidget&right)const;};如何根据标准对容器进行排序,无需定义另一个标准,例如:classCriteriumForPointers{public:booloperator()(conststd::shared_ptr&left,conststd::shared_ptr&right)const;}; 最佳答案 您可以使用lambda作为适

c++ - 返回一个 unique_ptr<T> 。概念澄清

在阅读有关boostunique_ptr的内容时,在这link上它指出不能复制这样的指针,据我所知,但是它指出可以从函数返回这样的指针。这在我脑海中提出了一个问题,当从函数返回某些东西(不是作为引用或指针)时,复制构造函数被调用。这是否意味着uniqueptr不与赋值运算符一起工作而与复制构造函数一起工作(这样一次只有ptr指向一个对象)而且它的开销是否比boostashared_ptr少?我正在使用VS2010 最佳答案 whensomethingisreturnedfromafunction(notasareferenceora

c++ - 如何将 unique_ptr 移动到原始指针?

我有一个函数,用于分配给定大小的缓冲区。缓冲区将在返回前预处理/填充一些数据。此预处理可能会返回false以表示此缓冲区未正确处理。所以我想在这个缓冲区上应用RAII以避免在没有delete[]的情况下提前返回通常我使用unique_ptr帮助我自动释放本地分配的对象。在这种情况下,我需要返回这个分配的对象(由unique_ptr拥有)并将所有权转移给调用者。但是编译器提示我无法转换unique_ptr至T*而我std::moveunique_ptr.看起来像unique_ptr只能移动到另一个unique_ptr而不是原始指针。有什么方法可以从unique_ptr转移所有权吗?到ra

c++ - 为什么 std::unique_ptr 没有像 std::shared_ptr 那样的别名构造函数?

我刚刚发现std::shared_ptr的“别名构造函数”并发现自己在问“为什么std::unique_ptr没有相应的构造函数?也就是说,如果你想分配一个Foo这样你就可以传递它的Bar应该完全管理Foo生命周期的函数的成员,能够这样做不是很好吗?#includestructB{}structA{Bb;}voidf(std::unique_ptrb);std::unique_ptra=std::make_unique();std::unique_ptrb{std::move(a),&(a->b)};//anowinvalid.f(std::move(b));//fnowrespons

c++ - 在为它分配新值之前应该将 `nullptr` 分配给 `std::unique_ptr` 吗?

#include#includeusingnamespacestd;intmain(){std::unique_ptrptrA=std::make_unique(10);ptrA=std::make_unique(20);//caseIreturn0;}#include#includeusingnamespacestd;intmain(){std::unique_ptrptrA=std::make_unique(10);ptrA=nullptr;//caseIIorptrA.reset()ptrA=std::make_unique(20);return0;}我见过很多人使用CaseII

c++ - 为什么 std::unique_ptr 没有 const get 方法?

我知道std::unique_ptr是这样的,可能不会改变以破坏向后兼容性,但我想知道是否有人有充分的理由说明规范的作者没有这样做'用看起来像这样的const变体重载get方法constT*get()const;遵循unique_ptr为const的意图。我最好的猜测是它试图镜像指针并像T*const而不是典型的类。作为后续问题,如果我想在类的const实例中以类似const的方式保存指针,我是否应该使用std::unique_ptr以外的其他东西来保存数据?更新在我的例子中,我想保护自己不在类本身中滥用指针。我正在编写一个const移动构造函数MyClass(constMyClass

将自定义类作为第二种类型的 C++ STL 映射

我想用一个int和我自己的自定义类创建一个map。有办法做到这一点吗?mapmyMap;如果没有,我该如何着手完成这项工作?基本上,我想要一个id(或者最好是一个enum)来指向我自己的自定义类。在大多数其他语言中,这将是一个简单的散列。 最佳答案 #includestd::mapmyMap;MyClassfoo;myMap[5]=foo;myMap[5].bar=10;你确实需要MyClass是默认和可复制构造的,所以它可以被创建(如果你使用,例如,myMap[5])并复制到map。

c++ - 如何设置一个以字符串为键、以 ostream 为值的映射?

我正在尝试使用mapC++中的容器,如下所示:key是string值是类型为ofstream的对象.我的代码如下所示:#include#include#include#includeusingnamespacestd;intmain(){//typedefmapmapType2;//mapfoo;typedefmapmapType;mapfooMap;ofstreamfoo1;ofstreamfoo2;fooMap["file1"]=foo1;fooMap["file2"]=foo2;mapType::iteratoriter=fooMap.begin();coutfirst;}但是,

c++ - C++ 中的 4d 映射?

你能告诉我如何写多维map吗?对于二维map,我做了以下操作:mapEmployeesEmployees[“person1”]=200;我正在尝试使用类似于以下内容的4d映射。mapEmployees;Employees[“person1”]["gender"][“age”]=200;你能告诉我正确的方法吗? 最佳答案 您通常希望将键的所有三个部分组合到一个类中,并使用一个比较运算符。您可以使用类似pair,string>的东西,或者一个boost::tuple,或者自己定义:classkey_type{std::stringfie

c++ - std::shared_ptr 的用法

如何将std::shared_ptr用于double组?此外,使用shared_ptr的优点/缺点是什么。 最佳答案 这取决于你追求的是什么。如果您只想要一个可调整大小的double数组,请使用std::vector例子:std::vectorv;v.push_back(23.0);std::cout如果共享所述数组的所有权对您很重要,请使用例如std::shared_ptr>例子:std::shared_ptr>v1(newstd::vector);v1->push_back(23.0);std::shared_ptr>v2=v1